/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package org.taobao.ibatiside.model.configv3.impl;

import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;

import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.EObjectImpl;

import org.taobao.ibatiside.model.configv3.ConfigurationType;
import org.taobao.ibatiside.model.configv3.Configv3Package;
import org.taobao.ibatiside.model.configv3.DatabaseIdProviderType;
import org.taobao.ibatiside.model.configv3.EnvironmentsType;
import org.taobao.ibatiside.model.configv3.MappersType;
import org.taobao.ibatiside.model.configv3.ObjectFactoryType;
import org.taobao.ibatiside.model.configv3.ObjectWrapperFactoryType;
import org.taobao.ibatiside.model.configv3.PluginsType;
import org.taobao.ibatiside.model.configv3.PropertiesType;
import org.taobao.ibatiside.model.configv3.SettingsType;
import org.taobao.ibatiside.model.configv3.TypeAliasesType;
import org.taobao.ibatiside.model.configv3.TypeHandlersType;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Configuration Type</b></em>'.
 * <!-- end-user-doc -->
 * <p>
 * The following features are implemented:
 * <ul>
 *   <li>{@link org.taobao.ibatiside.model.configv3.impl.ConfigurationTypeImpl#getProperties <em>Properties</em>}</li>
 *   <li>{@link org.taobao.ibatiside.model.configv3.impl.ConfigurationTypeImpl#getSettings <em>Settings</em>}</li>
 *   <li>{@link org.taobao.ibatiside.model.configv3.impl.ConfigurationTypeImpl#getTypeAliases <em>Type Aliases</em>}</li>
 *   <li>{@link org.taobao.ibatiside.model.configv3.impl.ConfigurationTypeImpl#getTypeHandlers <em>Type Handlers</em>}</li>
 *   <li>{@link org.taobao.ibatiside.model.configv3.impl.ConfigurationTypeImpl#getObjectFactory <em>Object Factory</em>}</li>
 *   <li>{@link org.taobao.ibatiside.model.configv3.impl.ConfigurationTypeImpl#getObjectWrapperFactory <em>Object Wrapper Factory</em>}</li>
 *   <li>{@link org.taobao.ibatiside.model.configv3.impl.ConfigurationTypeImpl#getPlugins <em>Plugins</em>}</li>
 *   <li>{@link org.taobao.ibatiside.model.configv3.impl.ConfigurationTypeImpl#getEnvironments <em>Environments</em>}</li>
 *   <li>{@link org.taobao.ibatiside.model.configv3.impl.ConfigurationTypeImpl#getDatabaseIdProvider <em>Database Id Provider</em>}</li>
 *   <li>{@link org.taobao.ibatiside.model.configv3.impl.ConfigurationTypeImpl#getMappers <em>Mappers</em>}</li>
 * </ul>
 * </p>
 *
 * @generated
 */
public class ConfigurationTypeImpl extends EObjectImpl implements ConfigurationType {
	/**
	 * The cached value of the '{@link #getProperties() <em>Properties</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getProperties()
	 * @generated
	 * @ordered
	 */
	protected PropertiesType properties;

	/**
	 * The cached value of the '{@link #getSettings() <em>Settings</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSettings()
	 * @generated
	 * @ordered
	 */
	protected SettingsType settings;

	/**
	 * The cached value of the '{@link #getTypeAliases() <em>Type Aliases</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTypeAliases()
	 * @generated
	 * @ordered
	 */
	protected TypeAliasesType typeAliases;

	/**
	 * The cached value of the '{@link #getTypeHandlers() <em>Type Handlers</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTypeHandlers()
	 * @generated
	 * @ordered
	 */
	protected TypeHandlersType typeHandlers;

	/**
	 * The cached value of the '{@link #getObjectFactory() <em>Object Factory</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getObjectFactory()
	 * @generated
	 * @ordered
	 */
	protected ObjectFactoryType objectFactory;

	/**
	 * The cached value of the '{@link #getObjectWrapperFactory() <em>Object Wrapper Factory</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getObjectWrapperFactory()
	 * @generated
	 * @ordered
	 */
	protected ObjectWrapperFactoryType objectWrapperFactory;

	/**
	 * The cached value of the '{@link #getPlugins() <em>Plugins</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPlugins()
	 * @generated
	 * @ordered
	 */
	protected PluginsType plugins;

	/**
	 * The cached value of the '{@link #getEnvironments() <em>Environments</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getEnvironments()
	 * @generated
	 * @ordered
	 */
	protected EnvironmentsType environments;

	/**
	 * The cached value of the '{@link #getDatabaseIdProvider() <em>Database Id Provider</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDatabaseIdProvider()
	 * @generated
	 * @ordered
	 */
	protected DatabaseIdProviderType databaseIdProvider;

	/**
	 * The cached value of the '{@link #getMappers() <em>Mappers</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMappers()
	 * @generated
	 * @ordered
	 */
	protected MappersType mappers;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ConfigurationTypeImpl() {
		super();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EClass eStaticClass() {
		return Configv3Package.Literals.CONFIGURATION_TYPE;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public PropertiesType getProperties() {
		return properties;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public NotificationChain basicSetProperties(PropertiesType newProperties, NotificationChain msgs) {
		PropertiesType oldProperties = properties;
		properties = newProperties;
		if (eNotificationRequired()) {
			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__PROPERTIES, oldProperties, newProperties);
			if (msgs == null) msgs = notification; else msgs.add(notification);
		}
		return msgs;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setProperties(PropertiesType newProperties) {
		if (newProperties != properties) {
			NotificationChain msgs = null;
			if (properties != null)
				msgs = ((InternalEObject)properties).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__PROPERTIES, null, msgs);
			if (newProperties != null)
				msgs = ((InternalEObject)newProperties).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__PROPERTIES, null, msgs);
			msgs = basicSetProperties(newProperties, msgs);
			if (msgs != null) msgs.dispatch();
		}
		else if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__PROPERTIES, newProperties, newProperties));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public SettingsType getSettings() {
		return settings;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public NotificationChain basicSetSettings(SettingsType newSettings, NotificationChain msgs) {
		SettingsType oldSettings = settings;
		settings = newSettings;
		if (eNotificationRequired()) {
			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__SETTINGS, oldSettings, newSettings);
			if (msgs == null) msgs = notification; else msgs.add(notification);
		}
		return msgs;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setSettings(SettingsType newSettings) {
		if (newSettings != settings) {
			NotificationChain msgs = null;
			if (settings != null)
				msgs = ((InternalEObject)settings).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__SETTINGS, null, msgs);
			if (newSettings != null)
				msgs = ((InternalEObject)newSettings).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__SETTINGS, null, msgs);
			msgs = basicSetSettings(newSettings, msgs);
			if (msgs != null) msgs.dispatch();
		}
		else if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__SETTINGS, newSettings, newSettings));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public TypeAliasesType getTypeAliases() {
		return typeAliases;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public NotificationChain basicSetTypeAliases(TypeAliasesType newTypeAliases, NotificationChain msgs) {
		TypeAliasesType oldTypeAliases = typeAliases;
		typeAliases = newTypeAliases;
		if (eNotificationRequired()) {
			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__TYPE_ALIASES, oldTypeAliases, newTypeAliases);
			if (msgs == null) msgs = notification; else msgs.add(notification);
		}
		return msgs;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTypeAliases(TypeAliasesType newTypeAliases) {
		if (newTypeAliases != typeAliases) {
			NotificationChain msgs = null;
			if (typeAliases != null)
				msgs = ((InternalEObject)typeAliases).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__TYPE_ALIASES, null, msgs);
			if (newTypeAliases != null)
				msgs = ((InternalEObject)newTypeAliases).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__TYPE_ALIASES, null, msgs);
			msgs = basicSetTypeAliases(newTypeAliases, msgs);
			if (msgs != null) msgs.dispatch();
		}
		else if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__TYPE_ALIASES, newTypeAliases, newTypeAliases));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public TypeHandlersType getTypeHandlers() {
		return typeHandlers;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public NotificationChain basicSetTypeHandlers(TypeHandlersType newTypeHandlers, NotificationChain msgs) {
		TypeHandlersType oldTypeHandlers = typeHandlers;
		typeHandlers = newTypeHandlers;
		if (eNotificationRequired()) {
			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__TYPE_HANDLERS, oldTypeHandlers, newTypeHandlers);
			if (msgs == null) msgs = notification; else msgs.add(notification);
		}
		return msgs;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTypeHandlers(TypeHandlersType newTypeHandlers) {
		if (newTypeHandlers != typeHandlers) {
			NotificationChain msgs = null;
			if (typeHandlers != null)
				msgs = ((InternalEObject)typeHandlers).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__TYPE_HANDLERS, null, msgs);
			if (newTypeHandlers != null)
				msgs = ((InternalEObject)newTypeHandlers).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__TYPE_HANDLERS, null, msgs);
			msgs = basicSetTypeHandlers(newTypeHandlers, msgs);
			if (msgs != null) msgs.dispatch();
		}
		else if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__TYPE_HANDLERS, newTypeHandlers, newTypeHandlers));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ObjectFactoryType getObjectFactory() {
		return objectFactory;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public NotificationChain basicSetObjectFactory(ObjectFactoryType newObjectFactory, NotificationChain msgs) {
		ObjectFactoryType oldObjectFactory = objectFactory;
		objectFactory = newObjectFactory;
		if (eNotificationRequired()) {
			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__OBJECT_FACTORY, oldObjectFactory, newObjectFactory);
			if (msgs == null) msgs = notification; else msgs.add(notification);
		}
		return msgs;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setObjectFactory(ObjectFactoryType newObjectFactory) {
		if (newObjectFactory != objectFactory) {
			NotificationChain msgs = null;
			if (objectFactory != null)
				msgs = ((InternalEObject)objectFactory).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__OBJECT_FACTORY, null, msgs);
			if (newObjectFactory != null)
				msgs = ((InternalEObject)newObjectFactory).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__OBJECT_FACTORY, null, msgs);
			msgs = basicSetObjectFactory(newObjectFactory, msgs);
			if (msgs != null) msgs.dispatch();
		}
		else if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__OBJECT_FACTORY, newObjectFactory, newObjectFactory));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ObjectWrapperFactoryType getObjectWrapperFactory() {
		return objectWrapperFactory;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public NotificationChain basicSetObjectWrapperFactory(ObjectWrapperFactoryType newObjectWrapperFactory, NotificationChain msgs) {
		ObjectWrapperFactoryType oldObjectWrapperFactory = objectWrapperFactory;
		objectWrapperFactory = newObjectWrapperFactory;
		if (eNotificationRequired()) {
			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__OBJECT_WRAPPER_FACTORY, oldObjectWrapperFactory, newObjectWrapperFactory);
			if (msgs == null) msgs = notification; else msgs.add(notification);
		}
		return msgs;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setObjectWrapperFactory(ObjectWrapperFactoryType newObjectWrapperFactory) {
		if (newObjectWrapperFactory != objectWrapperFactory) {
			NotificationChain msgs = null;
			if (objectWrapperFactory != null)
				msgs = ((InternalEObject)objectWrapperFactory).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__OBJECT_WRAPPER_FACTORY, null, msgs);
			if (newObjectWrapperFactory != null)
				msgs = ((InternalEObject)newObjectWrapperFactory).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__OBJECT_WRAPPER_FACTORY, null, msgs);
			msgs = basicSetObjectWrapperFactory(newObjectWrapperFactory, msgs);
			if (msgs != null) msgs.dispatch();
		}
		else if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__OBJECT_WRAPPER_FACTORY, newObjectWrapperFactory, newObjectWrapperFactory));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public PluginsType getPlugins() {
		return plugins;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public NotificationChain basicSetPlugins(PluginsType newPlugins, NotificationChain msgs) {
		PluginsType oldPlugins = plugins;
		plugins = newPlugins;
		if (eNotificationRequired()) {
			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__PLUGINS, oldPlugins, newPlugins);
			if (msgs == null) msgs = notification; else msgs.add(notification);
		}
		return msgs;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setPlugins(PluginsType newPlugins) {
		if (newPlugins != plugins) {
			NotificationChain msgs = null;
			if (plugins != null)
				msgs = ((InternalEObject)plugins).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__PLUGINS, null, msgs);
			if (newPlugins != null)
				msgs = ((InternalEObject)newPlugins).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__PLUGINS, null, msgs);
			msgs = basicSetPlugins(newPlugins, msgs);
			if (msgs != null) msgs.dispatch();
		}
		else if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__PLUGINS, newPlugins, newPlugins));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EnvironmentsType getEnvironments() {
		return environments;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public NotificationChain basicSetEnvironments(EnvironmentsType newEnvironments, NotificationChain msgs) {
		EnvironmentsType oldEnvironments = environments;
		environments = newEnvironments;
		if (eNotificationRequired()) {
			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__ENVIRONMENTS, oldEnvironments, newEnvironments);
			if (msgs == null) msgs = notification; else msgs.add(notification);
		}
		return msgs;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setEnvironments(EnvironmentsType newEnvironments) {
		if (newEnvironments != environments) {
			NotificationChain msgs = null;
			if (environments != null)
				msgs = ((InternalEObject)environments).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__ENVIRONMENTS, null, msgs);
			if (newEnvironments != null)
				msgs = ((InternalEObject)newEnvironments).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__ENVIRONMENTS, null, msgs);
			msgs = basicSetEnvironments(newEnvironments, msgs);
			if (msgs != null) msgs.dispatch();
		}
		else if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__ENVIRONMENTS, newEnvironments, newEnvironments));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public DatabaseIdProviderType getDatabaseIdProvider() {
		return databaseIdProvider;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public NotificationChain basicSetDatabaseIdProvider(DatabaseIdProviderType newDatabaseIdProvider, NotificationChain msgs) {
		DatabaseIdProviderType oldDatabaseIdProvider = databaseIdProvider;
		databaseIdProvider = newDatabaseIdProvider;
		if (eNotificationRequired()) {
			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__DATABASE_ID_PROVIDER, oldDatabaseIdProvider, newDatabaseIdProvider);
			if (msgs == null) msgs = notification; else msgs.add(notification);
		}
		return msgs;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDatabaseIdProvider(DatabaseIdProviderType newDatabaseIdProvider) {
		if (newDatabaseIdProvider != databaseIdProvider) {
			NotificationChain msgs = null;
			if (databaseIdProvider != null)
				msgs = ((InternalEObject)databaseIdProvider).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__DATABASE_ID_PROVIDER, null, msgs);
			if (newDatabaseIdProvider != null)
				msgs = ((InternalEObject)newDatabaseIdProvider).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__DATABASE_ID_PROVIDER, null, msgs);
			msgs = basicSetDatabaseIdProvider(newDatabaseIdProvider, msgs);
			if (msgs != null) msgs.dispatch();
		}
		else if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__DATABASE_ID_PROVIDER, newDatabaseIdProvider, newDatabaseIdProvider));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public MappersType getMappers() {
		return mappers;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public NotificationChain basicSetMappers(MappersType newMappers, NotificationChain msgs) {
		MappersType oldMappers = mappers;
		mappers = newMappers;
		if (eNotificationRequired()) {
			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__MAPPERS, oldMappers, newMappers);
			if (msgs == null) msgs = notification; else msgs.add(notification);
		}
		return msgs;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setMappers(MappersType newMappers) {
		if (newMappers != mappers) {
			NotificationChain msgs = null;
			if (mappers != null)
				msgs = ((InternalEObject)mappers).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__MAPPERS, null, msgs);
			if (newMappers != null)
				msgs = ((InternalEObject)newMappers).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - Configv3Package.CONFIGURATION_TYPE__MAPPERS, null, msgs);
			msgs = basicSetMappers(newMappers, msgs);
			if (msgs != null) msgs.dispatch();
		}
		else if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, Configv3Package.CONFIGURATION_TYPE__MAPPERS, newMappers, newMappers));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
		switch (featureID) {
			case Configv3Package.CONFIGURATION_TYPE__PROPERTIES:
				return basicSetProperties(null, msgs);
			case Configv3Package.CONFIGURATION_TYPE__SETTINGS:
				return basicSetSettings(null, msgs);
			case Configv3Package.CONFIGURATION_TYPE__TYPE_ALIASES:
				return basicSetTypeAliases(null, msgs);
			case Configv3Package.CONFIGURATION_TYPE__TYPE_HANDLERS:
				return basicSetTypeHandlers(null, msgs);
			case Configv3Package.CONFIGURATION_TYPE__OBJECT_FACTORY:
				return basicSetObjectFactory(null, msgs);
			case Configv3Package.CONFIGURATION_TYPE__OBJECT_WRAPPER_FACTORY:
				return basicSetObjectWrapperFactory(null, msgs);
			case Configv3Package.CONFIGURATION_TYPE__PLUGINS:
				return basicSetPlugins(null, msgs);
			case Configv3Package.CONFIGURATION_TYPE__ENVIRONMENTS:
				return basicSetEnvironments(null, msgs);
			case Configv3Package.CONFIGURATION_TYPE__DATABASE_ID_PROVIDER:
				return basicSetDatabaseIdProvider(null, msgs);
			case Configv3Package.CONFIGURATION_TYPE__MAPPERS:
				return basicSetMappers(null, msgs);
		}
		return super.eInverseRemove(otherEnd, featureID, msgs);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object eGet(int featureID, boolean resolve, boolean coreType) {
		switch (featureID) {
			case Configv3Package.CONFIGURATION_TYPE__PROPERTIES:
				return getProperties();
			case Configv3Package.CONFIGURATION_TYPE__SETTINGS:
				return getSettings();
			case Configv3Package.CONFIGURATION_TYPE__TYPE_ALIASES:
				return getTypeAliases();
			case Configv3Package.CONFIGURATION_TYPE__TYPE_HANDLERS:
				return getTypeHandlers();
			case Configv3Package.CONFIGURATION_TYPE__OBJECT_FACTORY:
				return getObjectFactory();
			case Configv3Package.CONFIGURATION_TYPE__OBJECT_WRAPPER_FACTORY:
				return getObjectWrapperFactory();
			case Configv3Package.CONFIGURATION_TYPE__PLUGINS:
				return getPlugins();
			case Configv3Package.CONFIGURATION_TYPE__ENVIRONMENTS:
				return getEnvironments();
			case Configv3Package.CONFIGURATION_TYPE__DATABASE_ID_PROVIDER:
				return getDatabaseIdProvider();
			case Configv3Package.CONFIGURATION_TYPE__MAPPERS:
				return getMappers();
		}
		return super.eGet(featureID, resolve, coreType);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eSet(int featureID, Object newValue) {
		switch (featureID) {
			case Configv3Package.CONFIGURATION_TYPE__PROPERTIES:
				setProperties((PropertiesType)newValue);
				return;
			case Configv3Package.CONFIGURATION_TYPE__SETTINGS:
				setSettings((SettingsType)newValue);
				return;
			case Configv3Package.CONFIGURATION_TYPE__TYPE_ALIASES:
				setTypeAliases((TypeAliasesType)newValue);
				return;
			case Configv3Package.CONFIGURATION_TYPE__TYPE_HANDLERS:
				setTypeHandlers((TypeHandlersType)newValue);
				return;
			case Configv3Package.CONFIGURATION_TYPE__OBJECT_FACTORY:
				setObjectFactory((ObjectFactoryType)newValue);
				return;
			case Configv3Package.CONFIGURATION_TYPE__OBJECT_WRAPPER_FACTORY:
				setObjectWrapperFactory((ObjectWrapperFactoryType)newValue);
				return;
			case Configv3Package.CONFIGURATION_TYPE__PLUGINS:
				setPlugins((PluginsType)newValue);
				return;
			case Configv3Package.CONFIGURATION_TYPE__ENVIRONMENTS:
				setEnvironments((EnvironmentsType)newValue);
				return;
			case Configv3Package.CONFIGURATION_TYPE__DATABASE_ID_PROVIDER:
				setDatabaseIdProvider((DatabaseIdProviderType)newValue);
				return;
			case Configv3Package.CONFIGURATION_TYPE__MAPPERS:
				setMappers((MappersType)newValue);
				return;
		}
		super.eSet(featureID, newValue);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eUnset(int featureID) {
		switch (featureID) {
			case Configv3Package.CONFIGURATION_TYPE__PROPERTIES:
				setProperties((PropertiesType)null);
				return;
			case Configv3Package.CONFIGURATION_TYPE__SETTINGS:
				setSettings((SettingsType)null);
				return;
			case Configv3Package.CONFIGURATION_TYPE__TYPE_ALIASES:
				setTypeAliases((TypeAliasesType)null);
				return;
			case Configv3Package.CONFIGURATION_TYPE__TYPE_HANDLERS:
				setTypeHandlers((TypeHandlersType)null);
				return;
			case Configv3Package.CONFIGURATION_TYPE__OBJECT_FACTORY:
				setObjectFactory((ObjectFactoryType)null);
				return;
			case Configv3Package.CONFIGURATION_TYPE__OBJECT_WRAPPER_FACTORY:
				setObjectWrapperFactory((ObjectWrapperFactoryType)null);
				return;
			case Configv3Package.CONFIGURATION_TYPE__PLUGINS:
				setPlugins((PluginsType)null);
				return;
			case Configv3Package.CONFIGURATION_TYPE__ENVIRONMENTS:
				setEnvironments((EnvironmentsType)null);
				return;
			case Configv3Package.CONFIGURATION_TYPE__DATABASE_ID_PROVIDER:
				setDatabaseIdProvider((DatabaseIdProviderType)null);
				return;
			case Configv3Package.CONFIGURATION_TYPE__MAPPERS:
				setMappers((MappersType)null);
				return;
		}
		super.eUnset(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean eIsSet(int featureID) {
		switch (featureID) {
			case Configv3Package.CONFIGURATION_TYPE__PROPERTIES:
				return properties != null;
			case Configv3Package.CONFIGURATION_TYPE__SETTINGS:
				return settings != null;
			case Configv3Package.CONFIGURATION_TYPE__TYPE_ALIASES:
				return typeAliases != null;
			case Configv3Package.CONFIGURATION_TYPE__TYPE_HANDLERS:
				return typeHandlers != null;
			case Configv3Package.CONFIGURATION_TYPE__OBJECT_FACTORY:
				return objectFactory != null;
			case Configv3Package.CONFIGURATION_TYPE__OBJECT_WRAPPER_FACTORY:
				return objectWrapperFactory != null;
			case Configv3Package.CONFIGURATION_TYPE__PLUGINS:
				return plugins != null;
			case Configv3Package.CONFIGURATION_TYPE__ENVIRONMENTS:
				return environments != null;
			case Configv3Package.CONFIGURATION_TYPE__DATABASE_ID_PROVIDER:
				return databaseIdProvider != null;
			case Configv3Package.CONFIGURATION_TYPE__MAPPERS:
				return mappers != null;
		}
		return super.eIsSet(featureID);
	}

} //ConfigurationTypeImpl
